var tiles3dLayer;
var b3dmLayer;

function setStyle1() {
  if (tiles3dLayer) {
    tiles3dLayer.remove();
  }

  //模型
  tiles3dLayer = new mars3d.layer.TilesetLayer({
    type: "3dtiles",
    name: "北京市建筑物",
    // url: 'https://wckj2020.obs.cn-south-1.myhuaweicloud.com:443/wckj/pku/3dtileMerge2/tileset.json',
    url: "https://wckj2020.obs.myhuaweicloud.com:443/wckj/screen4new/example/res/data/bj4/tileset.json",
    maximumScreenSpaceError: 5,
    maximumMemoryUsage: 4096,
    dynamicScreenSpaceError: true,
    // showClickFeature: true,
    preloadFlightDestinations: true, //优化选择。当摄像机在飞行时，在摄像机的飞行目的地预加载贴图。
    skipLevelOfDetail: true,
    preferLeaves: true,
    luminanceAtZenith: 0.01, //太阳光照亮度
    popup: [
      {
        field: "objectid",
        name: "编号",
      },
      {
        field: "name",
        name: "名称",
      },
      {
        field: "height",
        name: "楼高",
        unit: "米",
      },
    ],
  });
  tiles3dLayer.style = new Cesium.Cesium3DTileStyle({
    color: {
      conditions: [
        // ["${height} >= 50", "rgb(52, 136, 199)"],
        // ["${height} >= 50", "rgb(11, 194, 235)"],
        ["true", "rgb(176,196,222)"],
      ],
    },
  });
  map.addLayer(tiles3dLayer);
}

function setStyle2() {
  if (tiles3dLayer) {
    tiles3dLayer.remove();
  }

  //自定义特效 Shader
  var fragmentShader = `
      // 注意shader中写浮点数是，一定要带小数点，否则会报错，比如0需要写成0.0，1要写成1.0
      float _baseHeight = 0.0; // 物体的基础高度，需要修改成一个合适的建筑基础高度
      float _heightRange = 20.0; // 高亮的范围(_baseHeight ~ _baseHeight + _heightRange) 默认是 0-60米
      float _glowRange = 200.0; // 光环的移动范围(高度)

      // 建筑基础色
      float mars_height = v_stcVertex.z - _baseHeight;
      float mars_a11 = fract(czm_frameNumber / 120.0) * 3.14159265 * 2.0;
      float mars_a12 = mars_height / _heightRange + sin(mars_a11) * 0.1;
      gl_FragColor *= vec4(mars_a12, mars_a12, mars_a12, 1.0);

      // 动态光环
      float mars_a13 = fract(czm_frameNumber / 360.0);
      float mars_h = clamp(mars_height / _glowRange, 0.0, 1.0);
      mars_a13 = abs(mars_a13 - 0.5) * 2.0;
      float mars_diff = step(0.005, abs(mars_h - mars_a13));
      gl_FragColor.rgb += gl_FragColor.rgb * (1.0 - mars_diff);
   `;

  tiles3dLayer = new mars3d.layer.TilesetLayer({
    name: "北京市建筑物",
    url: "https://wckj2020.obs.cn-south-1.myhuaweicloud.com:443/wckj/pku/3dtileMerge2/tileset.json",
    maximumScreenSpaceError: 5,
    maximumMemoryUsage: 2048,
    dynamicScreenSpaceError: true,
    // marsJzwStyle: true, //打开建筑物特效（内置Shader代码）
    marsJzwStyle: fragmentShader, //字符串值时，表示使用该字符串定义的自定义Shader
    showClickFeature: true,
    preloadFlightDestinations: true, //优化选择。当摄像机在飞行时，在摄像机的飞行目的地预加载贴图。
    skipLevelOfDetail: true,
    preferLeaves: true,
    luminanceAtZenith: 0, //太阳光照亮度
    popup: [
      {
        field: "objectid",
        name: "编号",
      },
      {
        field: "name",
        name: "名称",
      },
      {
        field: "height",
        name: "楼高",
        unit: "米",
      },
    ],
    flyTo: false,
  });

  tiles3dLayer.style = new Cesium.Cesium3DTileStyle({
    color: {
      conditions: [
        // ["${height} >= 50", "rgb(11,68,94)"],
        // ["${height} >= 8", "rgb(11,68,94)"],
        ["true", "rgb(119,136,153)"],
      ],
    },
  });
  map.addLayer(tiles3dLayer);
}

function loadB3dmLayer() {
  if (b3dmLayer) {
    b3dmLayer.remove();
  }
  b3dmLayer = new mars3d.layer.TilesetLayer({
    type: "3dtiles",
    name: "香洲倾斜模型",
    url: "https://testgis.4dage.com/gaoling0805-qp/tileset.json",
    // maximumScreenSpaceError: 1,
    // maximumMemoryUsage: 1024,
    // dynamicScreenSpaceError: true,
    // preloadFlightDestinations: true, //优化选择。当摄像机在飞行时，在摄像机的飞行目的地预加载贴图。
    // skipLevelOfDetail: false,
    // preferLeaves: false,
    maximumScreenSpaceError: 16, // 【重要】数值加大，能让最终成像变模糊
    maximumMemoryUsage: 512, // 【重要】内存建议显存大小的50%左右，内存分配变小有利于倾斜摄影数据回收，提升性能体验
    skipLevelOfDetail: false, //是Cesium在1.5x 引入的一个优化参数，这个参数在金字塔数据加载中，可以跳过一些级别，这样整体的效率会高一些，数据占用也会小一些。但是带来的异常是：1） 加载过程中闪烁，看起来像是透过去了，数据载入完成后正常。2，有些异常的面片，这个还是因为两级LOD之间数据差异较大，导致的。当这个参数设置false，两级之间的变化更平滑，不会跳跃穿透，但是清晰的数据需要更长，而且还有个致命问题，一旦某一个tile数据无法请求到或者失败，导致一直不清晰。所以我们建议：对于网络条件好，并且数据总量较小的情况下，可以设置false，提升数据显示质量。
    loadSiblings: true, // 如果为true则不会在已加载完模型后，自动从中心开始超清化模型
    cullRequestsWhileMoving: true,
    cullRequestsWhileMovingMultiplier: 1, //【重要】 值越小能够更快的剔除
    // preferLeaves: true, //【重要】这个参数默认是false，同等条件下，叶子节点会优先加载。但是Cesium的tile加载优先级有很多考虑条件，这个只是其中之一，如果skipLevelOfDetail=false，这个参数几乎无意义。所以要配合skipLevelOfDetail=true来使用，此时设置preferLeaves=true。这样我们就能最快的看见符合当前视觉精度的块，对于提升大数据以及网络环境不好的前提下有一点点改善意义。
    progressiveResolutionHeightFraction: 0.5, //【重要】 数值偏于0能够让初始加载变得模糊
    dynamicScreenSpaceError: true, // true时会在真正的全屏加载完之后才清晰化模型
    preloadWhenHidden: true, //tileset.show是false时，也去预加载数据
  });
  map.addLayer(b3dmLayer);
}

function loadDefaultModel() {
  if (tiles3dLayer) {
    tiles3dLayer.remove();
  }
  //模型
  tiles3dLayer = new mars3d.layer.TilesetLayer({
    type: "3dtiles",
    name: "珠海市白模",
    // url: 'https://wckj2020.obs.cn-south-1.myhuaweicloud.com:443/wckj/pku/3dtileMerge2/tileset.json',
    // url: 'https://wckj2020.obs.myhuaweicloud.com:443/wckj/screen4new/example/res/data/bj4/tileset.json',
    url: "https://houseoss.4dkankan.com/project/GAJMAP/model/xzBuild/tileset.json",
    // url: "http://8.135.106.227/gaoling/example/res/data/xzBuild/tileset.json",
    // marsJzwStyle: fragmentShader, //字符串值时，表示使用该字符串定义的自定义Shader
    maximumScreenSpaceError: 8,
    maximumMemoryUsage: 512,
    // dynamicScreenSpaceError: true,
    // showClickFeature: true,
    // preloadFlightDestinations: true, //优化选择。当摄像机在飞行时，在摄像机的飞行目的地预加载贴图。
    // skipLevelOfDetail: false,
    // preferLeaves: false,
    clampToGround: true,
    // luminanceAtZenith: 0.5, //太阳光照亮度
    // // marsJzwStyle: true,
    // // popup: [{
    // //     field: "id",
    // //     name: "编号",
    // //   },
    // //   {
    // //     field: "height",
    // //     name: "楼高",
    // //     unit: "米",
    // //   },
    // // ],
  });

  tiles3dLayer.style = new Cesium.Cesium3DTileStyle({
    color: {
      conditions: [
        ["${Floor} > 4", "rgba(204,204,204,1)"],
        ["${Floor} >= 2", "rgba(153,153,153,1)"],
        ["true", "rgba(255,255,255,1)"],
      ],
    },
  });

  // console.log(tiles3dLayer.style);

  map.addLayer(tiles3dLayer);
}

function loadOpacityModel() {
  if (tiles3dLayer) {
    map.removeLayer(tiles3dLayer, true);
  }
  if (zoneLayer) {
    map.removeLayer(zoneLayer, true);
  }
  // if (regionLayer) {
  //   map.removeLayer(regionLayer, true);
  // }
  tiles3dLayer = new mars3d.layer.TilesetLayer({
    type: "3dtiles",
    name: "北京市建筑物",
    // url: 'https://wckj2020.obs.cn-south-1.myhuaweicloud.com:443/wckj/pku/3dtileMerge2/tileset.json',
    url: "https://wckj2020.obs.myhuaweicloud.com:443/wckj/screen4new/example/res/data/bj4/tileset.json",
    // marsJzwStyle: fragmentShader, //字符串值时，表示使用该字符串定义的自定义Shader
    maximumScreenSpaceError: 5,
    maximumMemoryUsage: 2048,
    dynamicScreenSpaceError: true,
    showClickFeature: true,
    preloadFlightDestinations: true, //优化选择。当摄像机在飞行时，在摄像机的飞行目的地预加载贴图。
    skipLevelOfDetail: true,
    preferLeaves: true,
    clampToGround: true,
    luminanceAtZenith: 0.9, //太阳光照亮度
    style: {
      color: {
        conditions: [["true", "rgba(255, 255, 255, 0.8)"]],
      },
    },
    popup: [
      {
        field: "id",
        name: "编号",
      },
      {
        field: "height",
        name: "高度",
        unit: "米",
      },
    ],
  });
  map.addLayer(tiles3dLayer);
}
